#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        printf("errno = %d ,strerror = %s\n",errno,strerror(errno));
        exit(1);
    }
    else if(id == 0)
    {
        int cnt = 5;
        while(cnt--)
        {
            printf("我是子进程，pid = %d\n",getpid());
            sleep(1);
        }
        exit(123);
    }
    else 
    {
        sleep(10);
        int status;
        // pid_t wait_id = wait(&status);
        pid_t wait_id = waitpid(-1,&status,0);
        printf("等待子进程成功，status = %d,exit_code = %d,wait_id = %d\n",(status >> 8) & 0xff,status & 0x7F,wait_id);
        while(1)
        {
            printf("我是父进程，pid = %d\n",getpid());
            sleep(1);
        }
    }

   // printf("hello");
   // _exit(1);
   // exit(1);//exit 和 _exit 的区别就是exit会刷新缓冲区，而_exit不会刷新缓冲区
    
   // for(int i = 0;i < 200;i++)
   // {
   //     printf("errno = %d:,errorstring = %s\n",i,strerror(i));
   // }
   // printf("before,errno = %d,errnostring = %s\n",errno,strerror(errno));

   // FILE* fp = fopen("./log.txt","r");
   // if(fp == NULL)
   // {
   //     printf("after,errno = %d, errorstring = %s\n",errno,strerror(errno));
   //     return errno;
   // }
    return 0;
}
